<?php

Loader::using("Models::Entities::Archivos");

/**
 * Description of AdministrarArchivos
 *
 * @author JeyDotC
 * 
 * @export Modules
 * @export-metadata RequiredRoles:Agencia
 */
class AdministrarArchivos extends Module {

    private $errors = array(
        0 => "No errors.",
        1 => "Larger than upload_max_filesize.",
        2 => "Larger than form MAX_FILE_SIZE.",
        3 => "Partial upload.",
        4 => "No file.",
        5 => "No temporary directory.",
        6 => "Can't write to disk.",
        7 => "File upload stopped by extension.",
        8 => "File is empty." // add this to avoid an offset
    );

    public function index() {
        $this->display("index");
    }

    public function upload() {
        $file = $this->request->file("archivoRecalada");
        if ($file["error"] != 0) {
            $this->request->getSession()->put("fileResult", array("succeed" => false, "error" => $this->errors[$file["error"]]));
            $this->route->redirect($this->route->moduleAction("AdministrarRecaladas", "view", array("id" => $this->request->post("idRecalada"),)));
        }
        ob_start();
        //TODO: [debug] Borrar esta linea.
        var_dump($file);
        $result = ob_get_clean();
        file_put_contents(Loader::toSinglePath("Uploads::Log", ".txt"), $result);

        $archivo = new Archivos();

        $archivo->setNombre($this->getNewFileName($file["name"]));
        $archivo->setDireccion(Loader::toSinglePath("Uploads::", ""));
        $archivo->setDescripcion($this->request->post("descripcion"));
        ChromePhp::log($file["type"]);
        $archivo->setExtension($file["type"]);
        $archivo->setIdRecalada($this->request->post("idRecalada"));

        $this->components->Recaladas->createArchivo($archivo);

        move_uploaded_file($file["tmp_name"], $archivo->getDireccion() . $archivo->getNombre());

        $this->request->getSession()->put("fileResult", array("succeed" => true,));
        $this->route->redirect($this->route->moduleAction("AdministrarRecaladas", "view", array("id" => $this->request->post("idRecalada"))));
    }

    public function download() {
        $idArchivo = $this->request->get("idArchivo");
        /* @var $archivo Archivos */
        $archivo = $this->components->Recaladas->getArchivoById($idArchivo);
        $fileName = $archivo->getNombre();
        $filePath = $archivo->getDireccion();
        $mime = $archivo->getExtension();
        $fileFullName = "$filePath$fileName";

        header("Content-type: $mime");
        header("Content-Disposition: attachment;filename=$fileName");
        header("Content-Transfer-Encoding: binary");
        header('Pragma: no-cache');
        header('Expires: 0');
        // Send the file contents.
        set_time_limit(0);
        readfile($fileFullName);
    }

    public function removeFile() {
        $idArchivo = $this->request->post("idArchivo");
        echo $this->components->Recaladas->eliminarArchivo($idArchivo) ? "true" : false;
    }

    private function getNewFileName($filename) {
        str_replace("\\/:", "", $filename);
        str_replace(" ", "_", $filename);
        $filename = date("d-m-Y_H-i") . "_{$this->request->post("idRecalada")}-$filename";
        return $filename;
    }

}

?>
